//package com.wanban.adutils.tools
//
//import android.content.pm.PackageManager
//import android.os.Build
//import android.util.Log
//import com.umeng.analytics.MobclickAgent
//import com.umeng.commonsdk.UMConfigure
//import com.umeng.commonsdk.statistics.common.DeviceConfig
//import com.wanban.adutils.AdUtils
//import com.wanban.adutils.BuildConfig
//import com.wanban.adutils.db.bean.AdInfo
//
//object AnalysisTools {
//
//    private val appVer by lazy { getVersionCode() }
//
//    fun initUmeng(umengKey: String, channel: String) {
//        //友盟预初始化
//        UMConfigure.preInit(AdUtils.appContext, umengKey, channel)
//        // 支持在子进程中统计自定义事件
//        //友盟正式初始化
//        UMConfigure.submitPolicyGrantResult(AdUtils.appContext, true)
//
//        // 配置日志
//        UMConfigure.setLogEnabled(false)
//        // 统计崩溃
//        MobclickAgent.setCatchUncaughtExceptions(!AdUtils.debugModel)
//        // 配置页面采集方式，自动
//        MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO)
//        // 支持在子进程中统计自定义事件
//        UMConfigure.setProcessEvent(true)
//
//        UMConfigure.init(
//            AdUtils.appContext,
//            umengKey,
//            channel,
//            UMConfigure.DEVICE_TYPE_PHONE,
//            ""
//        )
//    }
//
//    fun getTestDeviceInfo(): String {
//        val deviceInfo = ArrayList<String>()
//        try {
//            deviceInfo.add(DeviceConfig.getDeviceIdForGeneral(AdUtils.appContext))
//            deviceInfo.add(DeviceConfig.getMac(AdUtils.appContext))
//        } catch (e: Exception) {
//            e.printStackTrace()
//        }
//        val format = "{\"device_id\": \"%s\", \"mac\": \"%s\"}"
//        return String.format(format, deviceInfo[0], deviceInfo[1])
//    }
//
//    fun analysis(event: String, key: String) {
//        MobclickAgent.onEvent(AdUtils.appContext, event, key)
//        Log.d("analysis", "$event -> $key")
//    }
//
//    fun analysis(event: String, key: String, value: Any) {
//        val map = HashMap<String, Any>()
//        map[key] = value
//        MobclickAgent.onEventObject(AdUtils.appContext, event, map)
//        Log.d("analysis", "$event -> $map")
//    }
//
//
//    fun analysis(event: String, params: Map<String, Any>) {
//        MobclickAgent.onEventObject(AdUtils.appContext, event, params)
//        Log.d("analysis", "$event -> $params")
//    }
//
//    /**
//     * 统计请求次数、广告商和版本号
//     */
//    fun analysis(adInfo: AdInfo?) {
//        if (adInfo == null) return
//        RxUtils.doObservable<Int> {
//            val map = HashMap<String, Any>()
//            // 广告商
//            map[AdConstants.KEY_AD_ADVERTISER] = getAdvertise(adInfo.advertiser)
//            // 请求次数
//            map[AdConstants.KEY_AD_REQUEST_TIMES] = 1
//            analysis(getAdEventType(adInfo.adId), map)
//            // 统计请求次数
//            analysisLoadTimes()
//            val mapAdVer = HashMap<String, Any>()
//            // 版本号
//            mapAdVer[AdConstants.KEY_AD_VERSION] = "appVer_$appVer"
//            analysis(getAdEventType(adInfo.adId), mapAdVer)
//            it.onComplete()
//        }
//    }
//
//    /**
//     * 统计点击次数
//     */
//    fun analysisClick(adId: Long?) {
//        if (adId == null) return
//        RxUtils.doObservable<Int> {
//            val map = HashMap<String, Int>()
//            // 点击
//            map[AdConstants.KEY_AD_CLICK] = 1
//            analysis(getAdEventType(adId), map)
//            it.onComplete()
//        }
//    }
//
//    /**
//     * 统计广告加载状态
//     */
//    fun analysisStatus(adId: Long?, success: Boolean, code: Int = -9999) {
//        if (adId == null) return
//        RxUtils.doObservable<Int> {
//            val map = HashMap<String, String>()
//            val status = if (success) {
//                "success"
//            } else {
//                if (code == AdConstants.ERROR_CODE_AD_OUT_OF_TIME) {
//                    "timeout"
//                } else {
//                    "fail"
//                }
//            }
//            map[AdConstants.KEY_AD_RESULT] = status
//            analysis(getAdEventType(adId), map)
//            it.onComplete()
//        }
//    }
//
//    /**
//     * 统计广告超时
//     */
//    fun analysisTimeout(adId: Long?) {
//        if (adId == null) return
//        RxUtils.doObservable<Int> {
//            val map = HashMap<String, String>()
//            map[AdConstants.KEY_AD_RESULT] = "timeout"
//            analysis(getAdEventType(adId), map)
//            it.onComplete()
//        }
//    }
//
//    /**
//     * 统计填充广告请求次数
//     */
//    fun analysisFillAdLoadTimes(){
//        val map = HashMap<String, Any>()
//        // 请求次数
//        map[AdConstants.KEY_AD_REQUEST_TIMES] = 1
//        analysis(AdConstants.EVENT_FILL_AD, map)
//    }
//
//    /**
//     * 统计广告正在加载
//     */
//    fun analysisLoading(adId: Long?) {
//        if (adId == null) return
//        RxUtils.doObservable<Int> {
//            val map = HashMap<String, String>()
//            map[AdConstants.KEY_AD_RESULT] = "loading"
//            analysis(getAdEventType(adId), map)
//            it.onComplete()
//        }
//    }
//
//
//    /**
//     * 统计失败状态码
//     */
//    fun analysisErrorCode(adId: Long, advertiser: Int, code: Int) {
//        RxUtils.doObservable<Int> {
//            val map = HashMap<String, String>()
//            map[AdConstants.KEY_AD_ERROR_CODE] = "${getAdvertise(advertiser)}_$code"
//            analysis(getAdEventType(adId), map)
//            it.onComplete()
//        }
//    }
//
//    /**
//     * 获取广告的事件类型
//     */
//    private fun getAdEventType(id: Long): String {
//        return when (id) {
//            AdConstants.AD_ID_OPEN -> AdConstants.EVENT_OPEN_AD
//            AdConstants.AD_ID_VIDEO_DETAIL_INTERSTITIAL -> AdConstants.EVENT_INTERSTITIAL_AD
//            AdConstants.AD_ID_VIDEO_DETAIL_PAUSE -> AdConstants.EVENT_PAUSE_AD
//            AdConstants.AD_ID_LOCK_REWARD_AD -> AdConstants.EVENT_REWARDED_LOCK
//            AdConstants.AD_ID_LOCK_INTERSTITIAL_AD -> AdConstants.EVENT_INTERSTITIAL_LOCK
//            AdConstants.AD_ID_DOWNLOAD_REWARD_AD -> AdConstants.EVENT_REWARDED_DOWNLOAD
//            AdConstants.AD_ID_DOWNLOAD_INTERSTITIAL -> AdConstants.EVENT_INTERSTITIAL_DOWNLOAD_AD
//            AdConstants.AD_ID_DOWNLOAD_PLAYER_INTERSTITIAL_AD -> AdConstants.EVENT_INTERSTITIAL_DOWNLOAD_PLAY
//            AdConstants.AD_ID_VIDEO_INSTREAM_AD -> AdConstants.EVENT_INSTREAM_AD
//            AdConstants.AD_ID_REOPEN_AD -> AdConstants.EVENT_INTERSTITIAL_REOPEN
//            AdConstants.AD_ID_VIDEO_DETAIL_BANNER -> AdConstants.EVENT_BANNER_AD
//            else -> AdConstants.EVENT_UNKNOWN_AD
//        }
//    }
//
//
//    fun getAdvertise(advertiser: Int): String {
//        return when (advertiser) {
//            AdConstants.ADVERTISER_ADMOB -> "google"
//            AdConstants.ADVERTISER_FACEBOOK -> "facebook"
//            AdConstants.ADVERTISER_APPLOVIN -> "applovin"
//            AdConstants.ADVERTISER_OPEN_MEDIATION -> "om"
//            AdConstants.ADVERTISER_IRON_SOURCE -> "iron source"
//            else -> "unknown"
//        }
//    }
//
//    @Suppress("DEPRECATION")
//    private fun getVersionCode(): Int {
//        try {
//            val manager = AdUtils.appContext.packageManager//获取包管理器
//            //通过当前的包名获取包的信息
//            val info = manager.getPackageInfo(AdUtils.appContext.packageName, 0)//获取包对象信息
//            return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
//                info.longVersionCode.toInt()
//            } else {
//                info.versionCode
//            }
//        } catch (e: PackageManager.NameNotFoundException) {
//            e.printStackTrace()
//        }
//        return 0
//    }
//
//
//    /**
//     * 任何广告请求都统计
//     */
//    private fun analysisLoadTimes() {
//        val map = HashMap<String, Any>()
//        // 请求次数
//        map[AdConstants.KEY_AD_LOAD_AD] = 1
//        analysis(AdConstants.EVENT_APP, map)
//    }
//
//    /**
//     * 统计填充广告请求次数
//     */
//    fun analysisFillAdErrorCode(code: Int){
//        val map = HashMap<String, Any>()
//        // 请求次数
//        map[AdConstants.KEY_AD_ERROR_CODE] = code.toString()
//        analysis(AdConstants.EVENT_FILL_AD, map)
//    }
//}